#[test]
pub fn run(){
    let x = |x|x+1;
    println!("{}",x(2));
    // println!("{}",x("2"));

    let mut num = 3;
    let mut x = |x|{
        num+=x; 
        num
    };

    let t = 3;
    // 这里报错 因为 num所有权在 闭包里
    // println!("{}", num);
    println!("{}",x(t));
    // 闭包加 move，num的值是 3，不加move值是6？？
    println!("{}", num); // 这里正常 闭包使用结束了
}
#[test]
fn iter_demo(){
    let arr:Vec<i32> = vec![1,3,5,9,4];
    let mut it = arr.iter(); // 未获得所有权，不可变
    println!("it.next={}", &it.next().unwrap_or(&-1));
    let arr = vec!["1".to_string()];
    let arr2:Vec<String> = arr.iter().map(|e|->String{
        let mut news = String::from(e);
        news.push_str("ch");
        news
    }).collect();
    println!("arr2={:?}", arr2);
    // for v in it {
    //     println!("it-v={}", v);
    // }

    println!("===============");

    let arr = vec!["1".to_string(),"2".to_string()];
    // 迭代器获得了或有权，不可变
    let into_it = arr.into_iter();
    for v in into_it{
        println!("v={}",v);
    }
}
#[test]
fn iter_mut(){
    let mut arr = vec![5,3,9,6];
    // 可变引用，未获取所有权
    let it_mut = arr.iter_mut();

    let mut i = 0;
    for v in it_mut {
        if i == 0{
            *v = 100; // 迭代时改值
        }
        println!("v={}", v);
        i += 1;
    }
    // 未获取所有权， 可以继续使用
    println!("arr={:?}", arr);

    let mut arr = vec!["1".to_string(),"2".to_string()];
    let mut v = &arr[0];
    println!("v={},arr[0]={}",v, arr[0]);
}